/**
 *
 * @param a 数据源
 * @param idStr 当前的主键key
 * @param pidStr 存放主键的key
 * @param chindrenStr 孩子的标志
 * @returns {Array} 新的数据
 */
function transData (a, idStr, pidStr, chindrenStr){
    var r = [], 
        hash = {}, 
        id = idStr, 
        pid = pidStr, 
        children = chindrenStr, 
        i = 0, 
        j = 0, 
        len = a.length; 

    for(; i < len; i++){ 
        hash[a[i][id]] = a[i];
    }

    for(; j < len; j++){    
        var aVal = a[j], 
            hashVP = hash[aVal[pid]];

        if(hashVP){    
            !hashVP[children] && (hashVP[children] = []);    
            hashVP[children].push(aVal);    
        }else{
            r.push(aVal);
        }
    }    
    return r;    
}


function formatTime(time) {
	if (typeof time !== 'number' || time < 0) {
		return time
	}

	var hour = parseInt(time / 3600)
	time = time % 3600
	var minute = parseInt(time / 60)
	time = time % 60
	var second = time

	return ([hour, minute, second]).map(function (n) {
		n = n.toString()
		return n[1] ? n : '0' + n
	}).join(':')
}

function formatLocation(longitude, latitude) {
	if (typeof longitude === 'string' && typeof latitude === 'string') {
		longitude = parseFloat(longitude)
		latitude = parseFloat(latitude)
	}

	longitude = longitude.toFixed(2)
	latitude = latitude.toFixed(2)

	return {
		longitude: longitude.toString().split('.'),
		latitude: latitude.toString().split('.')
	}
}
var dateUtils = {
	UNITS: {
		'年': 31557600000,
		'月': 2629800000,
		'天': 86400000,
		'小时': 3600000,
		'分钟': 60000,
		'秒': 1000
	},
	humanize: function (milliseconds) {
		var humanize = '';
		for (var key in this.UNITS) {
			if (milliseconds >= this.UNITS[key]) {
				humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
				break;
			}
		}
		return humanize || '刚刚';
	},
	format: function (dateStr) {
		var date = this.parse(dateStr)
		var diff = Date.now() - date.getTime();
		if (diff < this.UNITS['天']) {
			return this.humanize(diff);
		}
		var _format = function (number) {
			return (number < 10 ? ('0' + number) : number);
		};
		return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
			_format(date.getHours()) + ':' + _format(date.getMinutes());
	},
	parse: function (str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
		var a = str.split(/[^0-9]/);
		return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
	}
};


function cutImage (obj) {

	var width = obj.w;
	var height = obj.h;

	if(width < 400 || height < 400 ){
		var x = '';
		var y = '';
		var w = '';
		var h = '';

		if(width > height){
			x = (width - height) * 0.5;
			y = 0;
			w = height;
			h = height;
		}else{
			x = 0;
			y = (height - width) * 0.5;
			w = width;
			h = width;
		}

		return obj.url + '?x-oss-process=image/crop,' + 'x_' + parseInt(x) + ',y_' + parseInt(y) + ',w_' + parseInt(w) + ',h_' + parseInt(h);
	}else{
		return obj.url + '?x-oss-process=style/list';
	}

};


function changeImg(url, what){
	return url + '?x-oss-process=style/' + what;
}

function str2date(strDate){

	if(typeof strDate === 'string')
	{
		var objDate = new Date(Date.parse(strDate.replace(/-/g, "/")));

		return objDate;
	}
	else
	{
		return '错误格式';
	}
	
}


function date2str(objDate){

	if (typeof objDate === 'object') {
		var y = objDate.getFullYear();
		var m = objDate.getMonth() + 1;
		var d = objDate.getDate();
		m = m < 10? '0' + m: m;
		d = d < 10? '0' + d: d;
		return y + '-' + m + '-' + d;
	}
	else {
		return '错误格式';
	}
	
}

/**
 * @description 绑定事件 on(element, event, handler)
 */
const on = (function () {
	if (document.addEventListener) {
		return function (element, event, handler) {
			if (element && event && handler) {
				element.addEventListener(event, handler, false)
			}
		}
	} else {
		return function (element, event, handler) {
			if (element && event && handler) {
				element.attachEvent('on' + event, handler)
			}
		}
	}
})()

/**
 * @description 解绑事件 off(element, event, handler)
 */
const off = (function () {
	if (document.removeEventListener) {
		return function (element, event, handler) {
			if (element && event) {
				element.removeEventListener(event, handler, false)
			}
		}
	} else {
		return function (element, event, handler) {
			if (element && event) {
				element.detachEvent('on' + event, handler)
			}
		}
	}
})()

export default {
	formatTime: formatTime,
	formatLocation: formatLocation,
	dateUtils: dateUtils,
	cutImage,
	changeImg,
	transData,
	str2date,
	date2str,
	on,
	off,
}
